<?php
/**
 * HasMany
 *
 * Класс HasMany по сути является связью один ко многим
 *
 * @author Кузьма Дмитрий <kouzma.d@gmail.com>
 * @version 1.1
 */
class HasMany {
	public $className = null;  // Класс сущности на дальнем конце связи
	public $tableName = null;  // Название таблицы сущности на дальнем конце связи
	//public $pkName = null;
	public $fkName = null;		 // Название внешнего ключа сущности на дальнем конце связи. Эти ключом осуществляется ссылка на объект (сущности на ближнем конце связи)
	public $throw = null;			 // Используется для обозначения связи многие ко многим. Название таблицы, через которую осуществляется свзяь между сущностями
	public $save = false;			 //
	public $dependment = false; // Что делать со связями при удалении: destroy(удалять), :nullify (обнулять), false (ничего)

  public function __construct($arrInitial = null) {
		foreach ($arrInitial as $settingName => $settingValue) {
  		$this->setSetting($settingName, $settingValue);
  	}
  	if (isset($this->className) && (!isset($this->fkName) || !isset($this->tableName))) {

  		$s = "\$obj = new " . $this->className . "();";
			eval($s);
  	  $this->tableName = $obj->tableName;
  	  $this->fkName = $obj->pkName;
  	}
  }

	/**
	 * Метод устанавливает свойство (поисковое)
	 *
	 * @param string $settingName
	 * @param mixed $settingValue
	 */
	public function setSetting($settingName, $settingValue) {
		switch ($settingName) {
			case 'className':
				$this->className = $settingValue;
				break;
			case 'tableName':
				$this->tableName = $settingValue;
				break;
			case 'foreignKey':case 'fk':
				$this->fkName = $settingValue;
			//case 'primaryKey':case 'pk':
				//$this->pkName = $settingValue;
				//break;
		  case 'throw':
				$this->throw = $settingValue;
				break;
		  case 'dependment':
				$this->dependment = $settingValue;
				break;
		  case 'save':
				$this->save = $settingValue;
				break;
			default:
				throw new Exception('You are trying to use invalid configuration (). The assume settings are: "className", "tableName", "foreignKey", "dependment", "throw", "save", "pk"');
				break;
		}
	}

}

?>